<?php
/**
 *  数据库配置类
 * 作者: 韩占海
 * Date: 2017/9/10
 * Time: 23:52
 */
class DbConfig {
    private static $dbms = "mysql";      //mysql  oci mssql sqlite sqlite2 可以支持多数据库 需要引用库修改查询方式
    private static $host = 'localhost'; //数据库服务器
    private static $port = '3306';        //数据库服务端口
    private static $username = 'root';      //用户名
    private static $password = '1022';      //密码
    private static $dbname = 'weibao';  //数据库名
    private static $charset = 'utf-8';      //数据库编码
    private static $dsn;
    private static $DAITIFU ="swdanyinhaosw";


    /**
     * 读取数据表中的配置值 失败返回空字符串
     * @param $section  配置节名
     * @param $key      配置键名
     * @return mixed|string 返回字符串  失败返回空字符串
     */
    public static function get_ini($section,$key){
        $section =str_replace("'",self::$DAITIFU,$section);
        $key=str_replace("'",self::$DAITIFU,$key);
        $sql="SELECT ini_value FROM sys_ini WHERE ini_section='".$section."' AND ini_key='".$key."' LIMIT 5";
        $row = self::exeQuery($sql);
        if(count($row) ==0 ){return "";} //如果记录条数不等于1，失败返回空字符串
        $ret =$row[0]["ini_value"];
        return str_replace(self::$DAITIFU,"'",$ret);
    }

    /**
     * 保存配置值
     * @param $section 配置值节名
     * @param $key     配置值键名
     * @param $value   配置值
     * @return   返回true false
     */
    public static function set_ni($section,$key,$value,$desc = "系统使用值"){
        $section =str_replace("'",self::$DAITIFU,$section);
        $key=str_replace("'",self::$DAITIFU,$key);
        $value=str_replace("'",self::$DAITIFU,$value);
        $sql="select ini_value from sys_ini where ini_section='".$section."' and ini_key='.$key.' limit 5";
        $row = exeQuery($sql);
        if (count($row)  == 0){
            $sql ="INSERT INTO sys_ini (ini_section,ini_key,ini_value,ini_desc) VALUES ('".$section."','".$key."','".$value."','".$desc."')";
        }else{
            $sql ="UPDATE sys_ini SET ini_value = '".$value."' WHERE ini_section = '".$section."'  AND ini_key = '".$key."' ";
        }
        $int = self::getConnection()->exec($sql);
        if($int ==1){
            return true;
        }else{
            return false;
        }

    }

        /**
     * 返回DSN字符串
     * @return   返回pdo dsn配置
     */
    public static function getdsn() {
        if (!isset(self::$dsn)) {
            self::$dsn = self::$dbms . ':host=' . self::$host . ';port=' .
                self::$port . ';dbname=' . self::$dbname ;
           // if (strlen(self::$charset) > 0) {
            //    self::$dsn = self::$dsn . ';charset=' . self::$charset;
            //}
        }
        return self::$dsn;

        /*
        mssql:host=localhost;dbname=testdb
        mysql:host=localhost;port=3307;dbname=testdb
        mysql:unix_socket=/tmp/mysql.sock;dbname=testdb
        oci:dbname=//localhost:1521/mydb
        sqlite:/opt/databases/mydb.sq3
        sqlite::memory:
        sqlite2:/opt/databases/mydb.sq2
        sqlite2::memory
        */
    }

    /**
     *  @return 返回pdo 用户名
     **/
    public static function getusername(){
        return self::$username;
    }

    /**
     * @return 返回密码
     */
    public static function getpassword(){
        return self::$password;
    }

    /**
     * 设置mysql数据库服务器主机
     * @param  $host 主机的ip地址
     */
    public static function sethost($host) {
        if (isset($host) && strlen($host) > 0)
            self::$host = trim($host);
    }

    /**
     * 设置mysql数据库服务器的端口
     * @param  $port 端口
     */
    public static function setport($port) {
        if (isset($port) && strlen($port) > 0)
            self::$port = trim($port);
    }

    /**
     * 设置mysql数据库服务器的登陆用户名
     * @param  $username
     */
    public static function setusername($username) {
        if (isset($username) && strlen($username) > 0)
            self::$username = $username;
    }

    /**
     * 设置mysql数据库服务器的登陆密码
     * @param  $password
     */
    public static function setpassword($password) {
        if (isset($password) && strlen($password) > 0)
            self::$password = $password;
    }

    /**
     * 设置mysql数据库服务器的数据库实例名
     * @param  $dbname 数据库实例名
     */
    public static function setdbname($dbname) {
        if (isset($dbname) && strlen($dbname) > 0)
            self::$dbname = $dbname;
    }

    /**
     * 设置数据库编码
     * @param  $charset
     */
    public static function setCharSet($charset) {
        if (isset($charset) && strlen($charset) > 0)
            self::$charset = $charset;
    }

   /* 下面是私有函数 */

    /**
     * 返回数据库连接
     * @return pdo
     */
   private static function getConnection(){
       try{
           $conn = new pdo(self::getdsn(),self::$username,self::$password);
           $conn->setattribute(pdo::ATTR_CASE, pdo::CASE_NATURAL);
           return $conn;
       }catch (PDOException $ex){
           exit("创建连接时出错：".$ex->getMessage());
       }
   }

    /**
     * 执行SQL查询
     * @param $sql SQL语句
     * @param null $parameters 参数方式 防注入
     * @return array 返回数组
     */
    private static function exeQuery($sql, $parameters = null) {
        $conn = self::getConnection();
        $stmt = $conn->prepare($sql);
        $stmt->execute($parameters);
        $rs = $stmt->fetchall();
        $stmt = null;
        return $rs;
    }

    /**
     * 检测是否存在配置用的 数据表
     * @return bool
     */
    private static function check_Ini_Exitif(){
        $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '".self::$dbname."' AND table_name='sys_ini'";
        $db=new dbtemplate();
        $row =$db->queryrows($sql);
        if(count($row) ==1){
            return true;
        }else{
            return false;
        }
    }
}




